package greedy;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个偶数长度的数组，其中不同的数字代表着不同种类的糖果，每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
 输入: candies = [1,1,2,2,3,3]
 输出: 3
 解析: 一共有三种种类的糖果，每一种都有两个。
 最优分配方案：妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。

 输入: candies = [1,1,2,3]
 输出: 2
 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1]，妹妹有两种不同的糖果，弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。

 * @author le
 */
public class GiveCandiesSimple
{
    public static void main(String[] args)
    {
        int[] candies = {1,1,2,2,3,3};

        sort(candies,0,candies.length-1);
        int temp = candies[0];
        int count = 1;
        for (int i = 1; i < candies.length; i++)
        {
            if (temp != candies[i]){
                temp = candies[i];
                count++;
            }
        }

        if (count < candies.length/2){
            System.out.println(count);
        }else{
            System.out.println(candies.length/2);
        }

    }

    public static void sort(int[] arr, int left,int right){

        if (left < right){
            int key = arr[left];
            int i = left;
            int j = right;

            while(i < j)
            {
                while (i < j && arr[j] > key)
                {
                    j--;
                }
                if (i < j)
                {
                    arr[i++] = arr[j];
                }
                while (i < j && arr[i] < key)
                {
                    i++;
                }
                if (i < j)
                {
                    arr[j--] = arr[i];
                }
            }
            arr[i] = key;
            sort(arr, left, i-1);
            sort(arr, i+1, right);

        }
    }
}
